Centralize jspecify and checker-qual convergence pins to parent POM - #172
Conversation
…t patches The reactor is broken on main right now: Dependabot PR #169 bumped jspecify.version 1.0.0 -> 1.0.1 directly in all three child modules while net.ladenthin:llama:5.0.6 still pulls jspecify 1.0.0 transitively at compile scope, tripping maven-enforcer's DependencyConvergence at validate in every module. The PR's own Build check was already red; it was merged anyway. Pin jspecify (and, defensively, checker-qual — currently converged only because both sides happen to match today, the exact same latent shape jspecify had before PR #169) in the reactor parent's dependencyManagement, next to the existing slf4j-api/logback-classic/jackson pins, so every child module inherits one source of truth instead of repeating the version literal. Each child's own now-redundant jspecify.version/checker.version-on- the-dependency declarations are removed (checker.version itself is kept where it also drives the checker annotation-processor artifact). Also bump junit-jupiter 6.1.2 -> 6.1.3 and archunit-junit5 1.4.2 -> 1.5.0 to the latest patch/minor releases, aligning with BitcoinAddressFinder (already on archunit 1.5.0) and the other net.ladenthin Maven repos. Verified: reactor-wide mvn -B validate (DependencyConvergence passes in all 3 modules), mvn -B clean compile, and CoreArchitectureTest (13/13), CliArchitectureTest (7/7), PluginArchitectureTest (12/12) all green. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01KqVypnKbydSNgmGFfhCMUc
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01KqVypnKbydSNgmGFfhCMUc
Dependabot PR #171 rewrote every actions/setup-java@v5 reference to the exact release tag @v5.6.0 -- Dependabot's default github-actions behavior (compares against published Releases, rewrites to the exact tag once it touches a line, cannot be configured to preserve a floating major alias; no versioning-strategy support for this ecosystem). The floating @v5 alias is verified to correctly track the newest v5.x release, so reverting restores consistency with BitcoinAddressFinder and streambuffer, which still float @v5. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01KqVypnKbydSNgmGFfhCMUc
Latest stable release, matching the same bump in the other 3 sibling repos. Verified: reactor-wide mvn -B validate + clean compile, and a full PIT mutation run against the srcmorph module's 47-class/618-mutation gate (100% killed) on the new pitest version. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01KqVypnKbydSNgmGFfhCMUc
|
Code Review: This PR successfully centralizes dependency convergence pinning for jspecify and checker-qual to the reactor parent POM, addressing Dependabot PR #169. All three child modules are properly updated with removed redundant version tags. GitHub Actions have been modernized from pinned v5.6.0 to floating v5. Test dependencies are updated safely (junit 6.1.3, archunit 1.5.0, pitest-maven 1.25.9). Documentation in CLAUDE.md is clear. The dependencyConvergence maven-enforcer rule validates convergence is satisfied. All changes align with Maven best practices and prevent future silent convergence breakage. Ready to merge. |
|



Summary
jspecify(1.0.1) andchecker-qual(4.2.2) version management from child module properties to the reactor parent's<dependencyManagement>, alongside existingslf4j-api/logback-classic/jacksonpins<version>tags fromjspecifyandchecker-qualdependency declarations in all three child moduleschecker.versionproperty from 4.2.1 → 4.2.2 (drives the annotation-processor artifact; the dependency version is now managed by parent)junitfrom 6.1.2 → 6.1.3,archunitfrom 1.4.2 → 1.5.0, andpitest-mavenfrom 1.25.8 → 1.25.9setup-javafrom pinned v5.6.0 to floating v5 (auto-patch)CLAUDE.mdexplaining the convergence pinning pattern and referencing the shared workspace policyRationale
net.ladenthin:llamabrings bothjspecifyandchecker-qualtransitively at compile scope. Without centralized version management, independent version bumps on either side can silently diverge convergence (as happened in Dependabot PR #169, which merged despite a failedmaven-enforcerdependencyConvergencecheck). Pinning both in the parent's<dependencyManagement>ensures every reactor module shares the same versions and prevents future silent breakage.Test plan
dependencyConvergenceenforcement in each of the 3 reactor modules validates the pins work correctlyRelated issues / PRs
Refs Dependabot PR #169 (the convergence breakage that motivated this fix)
Checklist
CONTRIBUTING.mdandCODE_OF_CONDUCT.mdhttps://claude.ai/code/session_01KqVypnKbydSNgmGFfhCMUc